package tests;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

import tests.mocks.BuscarAsientosMock;
import tests.mocks.UsuarioMock;
import usuario.TipoUsuarioEstandar;
import usuario.TipoUsuarioVip;
import view.AterrizarWindow;
import asiento.Comprado;
import asiento.Reservado;
import asiento.SobreReservado;
import busqueda.Busqueda;
import busqueda.BusquedaConEscala;
import excepciones.NoPuedeComprarException;
import excepciones.NoPuedeReservarException;


public class BuscarAsientosTest {
	
	BuscarAsientosMock buscarAsiento;
	
	Busqueda busquedaConEscalas;
	Busqueda busquedaSinEscalas;	
	
	@Before
	public void setUp() throws Exception {
		buscarAsiento = new BuscarAsientosMock();
		
		UsuarioMock usuario = new UsuarioMock();
		usuario.setTipoUsuario(new TipoUsuarioEstandar());
		AterrizarWindow.usuario = usuario;
		
		busquedaConEscalas = new BusquedaConEscala("EZE", "USA", "20/12/2012");
		busquedaConEscalas.setTipoUsuario(new TipoUsuarioVip());
		
		busquedaSinEscalas = new Busqueda("EZE", "USA", "20/12/2012");
		busquedaSinEscalas.setTipoUsuario(new TipoUsuarioVip());
		Assert.assertTrue(true);
	}
	
	@Test
	public void testBuscarAsientoSinEscalas(){
		buscarAsiento.setDestino(busquedaSinEscalas.getDestino());
		buscarAsiento.setFecha(busquedaSinEscalas.getFechaSalida());
		buscarAsiento.setOrigen(busquedaSinEscalas.getOrigen());
		
		buscarAsiento.buscar();
		Assert.assertTrue(buscarAsiento.getResultados().size()==3);
	}
	
	@Test 
	public void testComprarAsiento() throws NoPuedeComprarException{
		buscarAsiento.setDestino(busquedaSinEscalas.getDestino());
		buscarAsiento.setFecha(busquedaSinEscalas.getFechaSalida());
		buscarAsiento.setOrigen(busquedaSinEscalas.getOrigen());
		buscarAsiento.buscar();
		buscarAsiento.setAsientoSeleccionado(buscarAsiento.getPrimerAsiento());
		buscarAsiento.comprarAsientoConExcepcionChequeada();
		Assert.assertTrue(buscarAsiento.getAsientoSeleccionado().getEstado() instanceof Comprado);
	}
	@Test
	public void testReservarAsiento() throws NoPuedeReservarException{
		buscarAsiento.setDestino(busquedaSinEscalas.getDestino());
		buscarAsiento.setFecha(busquedaSinEscalas.getFechaSalida());
		buscarAsiento.setOrigen(busquedaSinEscalas.getOrigen());
		buscarAsiento.buscar();
		buscarAsiento.setAsientoSeleccionado(buscarAsiento.getPrimerAsiento());
		buscarAsiento.reservarAsientoConExcepcionChequeada();
		Assert.assertTrue(buscarAsiento.getAsientoSeleccionado().getEstado() instanceof Reservado);
	}
	@Test
	public void testSobreReservarAsiento() throws NoPuedeReservarException{
		buscarAsiento.setDestino(busquedaSinEscalas.getDestino());
		buscarAsiento.setFecha(busquedaSinEscalas.getFechaSalida());
		buscarAsiento.setOrigen(busquedaSinEscalas.getOrigen());
		buscarAsiento.buscar();
		buscarAsiento.setAsientoSeleccionado(buscarAsiento.getPrimerAsiento());
		buscarAsiento.sobreReservarAsientoConExcepcionChequeada();
		Assert.assertTrue(buscarAsiento.getAsientoSeleccionado().getEstado() instanceof SobreReservado);
	}

	


}
